const express = require('express');
const cors = require('cors');
const dotenv = require('dotenv');
const db = require('./db');
// 导入路由模块
const shiftTypesRouter = require('./routes/shiftTypes');
const employeesRouter = require('./routes/employees');
const schedulesRouter = require('./routes/schedules');
const holidaysRouter = require('./routes/holidays');
const logger = require('./utils/logger');

// 加载环境变量
dotenv.config();

// 创建Express应用
const app = express();
const PORT = 3003; // 使用未被占用的端口

// 中间件
app.use(cors());
app.use(express.json());
app.use(express.urlencoded({ extended: true }));

// 请求日志中间件
app.use((req, res, next) => {
  // console.log(`[${new Date().toISOString()}] ${req.method} ${req.url}`);
  logger.info(`${req.method} ${req.url}`);
  next();
});

// 基础路由
app.get('/', (req, res) => {
  res.json({ message: '排班小工具API服务器运行中', status: 'success' });
});

// 注册路由
app.use('/api/shift-types', shiftTypesRouter);
app.use('/api/employees', employeesRouter);
app.use('/api/schedules', schedulesRouter);
app.use('/api/holidays', holidaysRouter);

// 错误处理
process.on('uncaughtException', (err) => {
  // console.error('未捕获的异常:', err);
  logger.error('未捕获的异常:', err);
  process.exit(1);
});

process.on('unhandledRejection', (reason, promise) => {
  // console.error('未处理的Promise拒绝:', reason);
  logger.error('未处理的Promise拒绝:', reason);
});

// 引入定时任务服务
require('./services/scheduleService');

// 启动服务器
const server = app.listen(PORT, () => {
  // console.log(`服务器运行在 http://localhost:${PORT}`); 
  logger.info(`服务器运行在 http://localhost:${PORT}`);
});

// 服务器错误处理
server.on('error', (err) => {
  if (err.code === 'EADDRINUSE') {
    // console.error(`端口 ${PORT} 已被占用，请关闭占用端口的进程或使用其他端口`);
    logger.error(`端口 ${PORT} 已被占用，请关闭占用端口的进程或使用其他端口`);
    process.exit(1);
  }
  // console.error('服务器启动错误:', err);
  logger.error('服务器启动错误:', err);
  process.exit(1);
});

module.exports = app;